﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel;
using Fatec.ControleEstoque.Attributes;
using Fatec.ControleEstoque.Attributes.Security;
using System.Data;
using Fatec.ControleEstoque.Data.Model;
using System.Collections;

namespace Fatec.ControleEstoque.Data.CustomModel
{
    public class PedidoItem
    {
        static List<PedidoItemMetadata> pedidoItem;

        public List<PedidoItemMetadata> Select(string sortExpression)
        {
            if (pedidoItem == null)
            {
                pedidoItem = new List<PedidoItemMetadata>();
            }

            if (!string.IsNullOrEmpty(sortExpression))
            {
                //pedidoItem = pedidoItem.AsQueryable().OrderBy(sortExpression).ToList();
            }
         
            return pedidoItem;
        }

        public int Insert(PedidoItemMetadata newRecord)
        {
            if (newRecord.Produto == null)
            {
                throw new ValidationException("O produto deve ser informado");
            }

            if (pedidoItem.Count > 0)
            {
                newRecord.Id = pedidoItem.ElementAt(pedidoItem.Count - 1).Id + 1;
            }
            else
            {
                newRecord.Id = 0;
            }

            pedidoItem.Add(newRecord);
            return 1;
        }

        public int Delete(PedidoItemMetadata oldRecord)
        {
            pedidoItem.Remove(oldRecord);
                        
            return 1;
        }

        public int Update(PedidoItemMetadata updRecord)
        {
            PedidoItemMetadata oldRecord;
            oldRecord = pedidoItem.First(delegate(PedidoItemMetadata p) { return p.Id == updRecord.Id; });

            if (oldRecord != null)
            {
                pedidoItem.Remove(oldRecord);
                pedidoItem.Add(updRecord);
                pedidoItem.Sort(ComparePedidoItem);
            }
            return 1;
        }

        private static int ComparePedidoItem(PedidoItemMetadata a, PedidoItemMetadata b)
        {
            if (a.Id > b.Id)
            {
                return 1;
            }
            else if(a.Id < b.Id)
            {
                return -1;
            }
            else
            {
                return 0;
            }
        }
    }
        
    public class PedidoItemMetadata
	{
        public int Id {get;set;}

        public int Qtde {get;set;}

        public float Valor {get;set;}

        public int Produto {get;set;}
	}
}
